package simonby.top.annualring.application.service;

import simonby.top.annualring.domain.model.UserFamily;
import simonby.top.annualring.domain.repository.UserFamilyRepository;
import simonby.top.annualring.infrastructure.repository.UserFamilyRepositoryImpl;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Optional;

/**
 * 用户家族关联应用服务
 * 处理用户与家族关联关系的业务逻辑
 */
@Service
public class UserFamilyApplicationService {
    private final UserFamilyRepository userFamilyRepository;

    public UserFamilyApplicationService(UserFamilyRepositoryImpl userFamilyRepository) {
        this.userFamilyRepository = userFamilyRepository;
    }

    /**
     * 创建用户家族关联关系
     * @param userFamily 用户家族关联对象
     * @return 创建后的关联关系
     */
    public UserFamily createUserFamily(UserFamily userFamily) {
        return userFamilyRepository.save(userFamily);
    }

    /**
     * 根据ID获取用户家族关联关系
     * @param id 关联ID
     * @return 用户家族关联对象
     */
    public Optional<UserFamily> getUserFamilyById(Long id) {
        return userFamilyRepository.findById(id);
    }

    /**
     * 根据用户ID获取关联的家族树
     * @param userId 用户ID
     * @return 用户家族关联列表
     */
    public List<UserFamily> getUserFamiliesByUserId(Long userId) {
        return userFamilyRepository.findByUserId(userId);
    }

    /**
     * 根据家族树ID获取关联的用户
     * @param familyTreeId 家族树ID
     * @return 用户家族关联列表
     */
    public List<UserFamily> getUserFamiliesByFamilyTreeId(Long familyTreeId) {
        return userFamilyRepository.findByFamilyTreeId(familyTreeId);
    }

    /**
     * 获取所有用户家族关联关系
     * @return 用户家族关联列表
     */
    public List<UserFamily> getAllUserFamilies() {
        return userFamilyRepository.findAll();
    }

    /**
     * 更新用户家族关联关系
     * @param userFamily 用户家族关联对象
     * @return 更新后的关联关系
     */
    public UserFamily updateUserFamily(UserFamily userFamily) {
        return userFamilyRepository.save(userFamily);
    }

    /**
     * 删除用户家族关联关系
     * @param id 关联ID
     */
    public void deleteUserFamily(Long id) {
        userFamilyRepository.deleteById(id);
    }
}